package packageDataAccess;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import javax.naming.InitialContext;
import javax.naming.Context;
import packageException.CategorieException;
import packageModel.Categorie;
import java.util.ArrayList;
import javax.naming.NamingException;
import packageException.DataException;

/**
 *
 * @author Lionel & Julien
 */
public class CategorieSyllathequeData {
    /**
     * Retourne la catégorie passé en paramètre
     * 
     * @param categorieId
     * @return Categorie
     * @throws CategorieException
     * @throws DataException  
     */
    public Categorie getCategorieById (int categorieId) throws 
            CategorieException,
            DataException {
        Categorie cat = null;
        try {
            // Connexion à la base de données
            Context ctx = new InitialContext(); 
            DataSource source = (DataSource) ctx.lookup("jdbc/Syllatheque"); 
            Connection connexion = source.getConnection();
            
            // SQL
            String requeteSql = "SELECT * "
                    + "FROM Categorie "
                    + "WHERE categorieId = ? "
                    + "ORDER BY denomination";

            // Traitement
            PreparedStatement prepStat = connexion.prepareStatement(requeteSql);
            prepStat.setInt(1, categorieId);

            ResultSet donnees = prepStat.executeQuery();
            donnees.next();
            
            cat = new Categorie(
                        donnees.getInt(1), 
                        donnees.getString(2), 
                        donnees.getString(3), 
                        donnees.getString(4)
                    );
            
            // Fermeture de la connexion
            connexion.close();
        }
        catch(SQLException e) {
            // ERREUR
            throw new CategorieException(e.getMessage());
        }
        catch(NamingException e) {
            // ERREUR
            throw new DataException(e.getMessage());
        }
        return cat;
    }
    
    /**
     * Retourne toutes les catégories insérées dans la base de données
     * 
     * @return ArrayList<Categorie>
     * @throws CategorieException
     * @throws DataException  
     */
    public ArrayList<Categorie> getAllCategorie () throws 
            CategorieException,
            DataException {
        ArrayList<Categorie> cat = new ArrayList<Categorie>();
        try {
            // Connexion à la base de données
            Context ctx = new InitialContext(); 
            DataSource source = (DataSource) ctx.lookup("jdbc/Syllatheque"); 
            Connection connexion = source.getConnection(); 
            
            // SQL
            String requeteSql = "SELECT * "
                    + "FROM Categorie "
                    + "ORDER BY denomination";

            // Traitement
            PreparedStatement prepStat = connexion.prepareStatement(requeteSql);
            
            ResultSet donnees = prepStat.executeQuery();
            while(donnees.next()) {
               cat.add(new Categorie(
                           donnees.getInt(1), 
                           donnees.getString(2), 
                           donnees.getString(3), 
                           donnees.getString(4)
                       ));
            }
            
            // Fermeture de la base de données
            connexion.close();
        }
        catch(SQLException e) {
            // ERREUR
            throw new CategorieException(e.getMessage());
        }
        catch(NamingException e) {
            // ERREUR
            throw new DataException(e.getMessage());
        }
        return cat;
    }
    
}
